package com.example.jianzhioffer;

import java.util.Stack;

/**
 * Created by Quincy on 2018/10/7.
 * 定义栈的数据结构，请在该类型中实现一个能够得到栈中所含最小元素的min函数（时间复杂度应为O（1））。
 */
public class MinStack {
    Stack<Integer> data = new Stack<Integer>(); //存放元素栈
    Stack<Integer> min = new Stack<Integer>(); //辅助栈，data栈中每次进入一个元素，min辅助栈就存放当前data栈中的最小元素
    //data栈和min栈进入元素
    public void push(int node) {
        data.push(node);
        if (min.size() == 0 || node < min.peek())
            min.push(node);
        else
            min.push(min.peek());
    }

    //data栈和min栈弹出元素
    public void pop() {
        if (data.size() > 0 && min.size() > 0){
            data.pop();
            min.pop();
        }
    }
    //data栈的栈顶元素
    public int top() {
        if (data.size() > 0)
            return data.peek();
        return 0;
    }

    //min栈的栈顶元素，栈顶元素为data栈中现有元素的最小元素
    public int min() {
        if (data.size() > 0 && min.size() > 0)
            return min.peek();
        return 0;
    }
}
